package com.shensi.appCollect.pay;

import com.shensi.appCollect.constantEnum.TianQuetechPayEnum;
import com.shensi.appCollect.param.request.AddPayOrderParam;
import com.shensi.api.order.domian.station.PayOrder;
import com.shensi.appCollect.param.request.AddPayOrderParamBase;
import com.shensi.appCollect.pojo.PayWay;
/**
 * @date 2023/8/10
 */
public interface PaymentStrategy {


    /**
     * 支付之前调用
     * @param orderParam
     * @param payOrder 新创建的订单对象
     * @return 返回值传给doPay方法
     */
    Object beforePay(AddPayOrderParamBase orderParam, PayOrder payOrder, PayWay payWay);

    /**
     * 具体的支付处理方法，在这里调用第三方
     * @param orderParam
     * @param payOrder 新创建的订单对象
     * @param preParam 该参数是beforePay的返回值
     * @return 返回值回传给checkResult，postPay1，postPay方法
     */
    Object doPay(AddPayOrderParamBase orderParam, PayOrder payOrder, PayWay payWay, Object preParam);

    /**
     * 判断第三方是否调用成功，失败处理在这里写
     * @param payOrder 新创建的订单对象
     * @param result 该参数是doPay的返回值
     * @return
     */
    boolean checkResult(PayOrder payOrder,Object result);


    boolean checkResult2(PayOrder payOrder,Object result);

    TianQuetechPayEnum checkResult3(PayOrder payOrder, Object result);

    /**
     * 第三方接口调用成功后执行，不论结果是否正确
     * todo 之后考虑独立出一个接口
     * @param payOrder
     * @param result 该参数是doPay的返回值
     */
    void postPay(PayOrder payOrder,Object result);

    /**
     * 免密付款同步返回结果后执行，针对随行付
     * 支付不成功不执行
     * @param payOrder
     * @param result
     */
    void syncPostPay(PayOrder payOrder, Object result);

}
